package apiooday01;

public class String总结 {
    /**
     * String：有final修饰，不能被继承，底层封装的是final(char类型)字符数组，所以不变对象
       。每次修改引用的变量的值都在不断创建新的对象，不适合频繁修改
       但是实际应用中基本上字符串都是在查看，所以应用率高
       重写了toString和equals方法
     * length（）获取字符串长度
     * trim（）去掉两边空白
     * toUpperCase（）/toLowerCase（）英文换大小写
     * startsWith/endsWith（）判断是否以某个字符开始/结束
     * charAt根据下标找字符内容
     * indexOf/lastindexOf查找字符第一次(第n次出现)/最后一次出现
     * substring截取字符串
     * 静态方法valueOf（）将其他类型转换为字符串
     * matches（）验证格式（正则表达式）
     * replaceAll（）替换（正则表达式）
     * spilt（）拆分（正则表达式）
     *

     * 包装类：装箱（在值类型向引用类型转换时发生；）
     *  Integer i1 = new Integer(5);
     *   Integer i3 =Integer.valueOf(128-1);使用valueof的方式会复用1个字节-128到128的数据
     *   拆箱：（在引用类型向值类型转换时发生；）
     *    Integer i1 =128;
     * int i2=i1.intValue（）
     */

    /**
     * StringBuilder适合频繁修改，封装的是普通的字符数组，不是final，修改效率高
     * 非线程安全的，并发处理（一起处理），性能稍快，一般都可以用，用法与StringBuffer一样
     * StringBuffer的不同点是线程安全的，同步处理（单独处理完再继续下一个处理），性能稍慢，应用率不高
     *没有重写equals方法，但有重写toString方法
     *  builder.append（追加的字符内容）在后面追加内容
     * builder.replace（从哪个下标开始，从哪个下标结束，替换的内容）替换
     * builder. delete（从哪个下标开始，从哪个下标结束）删除内容
     * insert（从哪个下标开始，需要插入的内容）插入字符
     *
     * // builder.reverse();//倒序输出
     */

    /**
     * String转为StringBuilder：
     * StringBuilder builder =new StringBuilder(str);
     *
     * StringBuilder转为String：
     * String s=builder.toString；
     */

    /**
     * String类型转为double类型 用基本类型的包装类名调用方法parse
     *    String s1= "3.14";
     *    double age =Double.parseDouble(s1);
     */

    /**
     * 正则表达式：
     *matches（regex（正则表达式））判断是否符合参数的格式
     * replaceAll（输入格式（正则表达式），输入需要替换的内容（新内容））替换
     *
     * split（regex（正则表达式））拆分，拆分的内容会被删除，返回一个数组类型
     *   String[] data=line.split("[\\.]+");
     */
}
